package main

import (
	"fmt"
	"math"
)

func main() {
	list := [][]int{[]int{0,0,1,1},[]int{0,1,1,1}}
	matrixScore(list)
}
/*
有一个二维矩阵 A 其中每个元素的值为 0 或 1 。
移动是指选择任一行或列，并转换该行或列中的每一个值：将所有 0 都更改为 1，将所有 1 都更改为 0。
在做出任意次数的移动后，将该矩阵的每一行都按照二进制数来解释，矩阵的得分就是这些数字的总和。
返回尽可能高的分数。
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/score-after-flipping-matrix
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/

func matrixScore(A [][]int) int {
	for _,list := range A{
		if list[0] != 1{
			list[0] =1
			for i:=1 ;i<len(list);i++ {
				if list[i] == 0{
					list[i] = 1
				}else {
					list[i] = 0
				}
			}
			//fmt.Println(list)
		}

	}
	//fmt.Println(A)
	count0 := 0
	count1 := 0
	tag1 := 0
	tag2 := 0
	temp := [][]int{}
	//fmt.Println(A)
	for m := 0;m <len(A[0]);m++{
		for k:= 0 ;k<len(A);k ++{
			tag1 = k
			for j := m+1;j<len(A[k]);j++{
				tag2 = j
				//fmt.Println(A[k][j])
				if A[k][j] == 0{
					count0 +=1
				}else {
					count1 +=1
				}

				break
			}
			temp = append(temp, []int{tag1,tag2})

		}
		if count0 > count1{
			for _,x := range temp{
				//fmt.Println(x)
				//fmt.Println(A[x[0]][x[1]])
				if A[x[0]][x[1]] == 0{
					A[x[0]][x[1]] = 1
					//fmt.Println(A[0],A[1])
				}else {
					A[x[0]][x[1]] = 0
				}
			}

		}
		//fmt.Println(A)
		//fmt.Println(count0,count1)
		//fmt.Println("..............")

		count0 = 0
		count1 = 0
		fmt.Println(temp)
		temp = [][]int{}
	}
	total := 0
	n := len(A[0])-1
	var res int = 0
	for i:=0;i<len(A);i++{
		for index,num := range A[i]{
			//fmt.Println(num,n-index)
			res += num * int(math.Pow(float64(2),float64(n-index)))
			//fmt.Println(res)
		}
		//fmt.Println(res)
		total += res
		res = 0
	}

	fmt.Println(A)
	fmt.Println(total)
	return 0
}